package algos;

import java.util.List;

/**
 * The game interface provides verifications on Grid objects.
 */
public abstract class GameController<T> {
	
	/**
	 * IsComplete returns true when the goal is reached
	 * @return true when the grid is full
	 */
	public abstract boolean isComplete(ContextStack<T> contextStack);
	
	/**
	 * IsCorrect returns true when the incomplete context is still a valid
	 * context that can leads us to a complete context. A basic implementation
	 * say a context is not correct when no actions remains in it.
	 * @param coontextStack
	 * @return 
	 */
	public abstract boolean isCorrect(T context);
	
	/**
	 * GetActions look at the context stack to find the different actions to
	 * try. The order of the list may be important depending on the algorithms.
	 * @param context the context stack
	 * @return a list of actions that make sense on this context
	 */
	public abstract List<Action<T>> getActions(T context);
	
}
